---
title: create-expo-app
maxHeadingDepth: 4
description: A command-line tool to create a new Expo and React Native project.
---

import { Terminal } from '~/ui/components/Snippet';
import { Tab, Tabs } from '~/ui/components/Tabs';

`create-expo-app` is a command-line tool to create and set up a new Expo and React Native project. This tool simplifies the initialization process by providing various templates to get started quickly without the need for manual configuration.

## Create a new project

To create a new project, run the following command:

<Tabs>

<Tab label="npx">

<Terminal cmd={['$ npx create-expo-app@latest']} />

</Tab>

<Tab label="Yarn">

<Terminal cmd={['$ yarn create expo-app']} />

</Tab>

<Tab label="pnpm">

<Terminal cmd={['$ pnpm create expo-app']} />

</Tab>

<Tab label="bun">

<Terminal cmd={['$ bun create expo']} />

</Tab>

</Tabs>

Running the above command will prompt you to enter the app name of your project. This app name is also used in the app config's [`name`](/versions/latest/config/app/#name) property.

<Terminal cmd={['What is your app named? my-app']} />

## Options

Uses the following options to customize the command behavior.

### `--yes`

Uses the default options to create a new project.

### `--no-install`

Skips installing npm dependencies or CocoaPods.

### `--template`

Running `create-expo-app` with a [Node Package Manager](#node-package-managers-support) initializes and sets up a new Expo project using the default template.

You can use the `--template` option to select one of the following templates or pass it as an argument to the option. For example, `--template default`.

| Template                                                                                              | Description                                                                                                                                                                           |
| ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`default`](https://github.com/expo/expo/tree/main/templates/expo-template-default)                   | Default template. Designed to build multi-screen apps. Includes recommended tools such as Expo CLI, Expo Router library and TypeScript configuration enabled. Suitable for most apps. |
| [`blank`](https://github.com/expo/expo/tree/main/templates/expo-template-blank)                       | Installs minimum required npm dependencies without configuring navigation.                                                                                                            |
| [`blank-typescript`](https://github.com/expo/expo/tree/main/templates/expo-template-blank-typescript) | A Blank template with TypeScript enabled.                                                                                                                                             |
| [`tabs`](https://github.com/expo/expo/tree/main/templates/expo-template-tabs)                         | Installs and configures file-based routing with Expo Router and TypeScript enabled.                                                                                                   |
| [`bare-minimum`](https://github.com/expo/expo/tree/main/templates/expo-template-bare-minimum)         | A Blank template with native directories (**android** and **ios**) generated. Runs [`npx expo prebuild`](/workflow/prebuild/) during the setup.                                       |

### `--example`

Use this option to initialize a project using an example from [expo/examples](https://github.com/expo/examples).

For example, running `npx create-expo-app --example with-router` will set up a project with Expo Router library.

### `--version`

Prints the version number and exits.

### `--help`

Prints the list of available options and exits.

## Node Package Managers support

Creating a new project with `create-expo-app` also handles setting up additional configuration needed for a specific Node Package Manager.

**If you are migrating from one package manager to another**, you've to manually carry out the additional configuration in your project. **If you are using [EAS](/eas/)**, you also have to configure your project for any additional required steps manually.

All the additional steps for each package manager are listed below.

### npm

#### Local installation

npm is installed as part of Node.js installation. See [Node.js documentation](https://nodejs.org/en/download/package-manager) for installation instructions.

#### EAS installation

Supported by default if the project directory contains **package-lock.json**.

### Yarn 1 (Classic)

#### Local installation

Yarn 1 (Classic) is usually installed as a global dependency of npm. See [Yarn 1 documentation](https://classic.yarnpkg.com/en/docs/getting-started) for installation instructions.

#### EAS installation

Supported by default if the project directory contains **yarn.lock**.

### Yarn 2+ (Modern)

#### Local installation

See [Yarn documentation](https://yarnpkg.com/getting-started/install) for installation instructions.

Yarn 2+ handles package management differently than Yarn 1. One of the core changes in Yarn 2+ is the [Pug'n'Play (PnP)](https://yarnpkg.com/features/pnp) node linking model that does not work with React Native.

By default, a project created with `create-expo-app` and Yarn 2+ uses [`nodeLinker`](https://yarnpkg.com/features/linkers#nodelinker-node-modules) with its value set to `node-modules` to install dependencies.

```yml .yarnrc.yml
nodeLinker: node-modules
```

#### EAS installation

Yarn Modern on EAS requires requires adding [`eas-build-pre-install` hook](/build-reference/npm-hooks/). In your project's **package.json**, add the following configuration:

```json package.json
{
  "scripts": {
    "eas-build-pre-install": "corepack enable && yarn set version 4"
  }
}
```

### pnpm

#### Local installation

Requires installing Node.js. See [pnpm documentation](https://pnpm.io/installation) for installation instructions.

By default, a project created with `create-expo-app` and pnpm uses [`node-linker`](https://pnpm.io/npmrc#node-linker) with its value set to `hoisted` to install dependencies.

```ini .npmrc
node-linker=hoisted
```

#### EAS installation

Supported by default if the project directory contains **pnpm-lock.yaml**.

### Bun

See [Bun](/guides/using-bun/) guide for details on creating a new Expo project with `bun`, migration from another package manager, and usage with EAS.
